package com.ruoyi.system.service;

import java.util.List;
import com.ruoyi.system.domain.NoteComment;

/**
 * 笔记评论记录Service接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface INoteCommentService 
{
    /**
     * 查询笔记评论记录
     * 
     * @param commentId 笔记评论记录主键
     * @return 笔记评论记录
     */
    public NoteComment selectNoteCommentByCommentId(Long commentId);

    /**
     * 查询笔记评论记录列表
     * 
     * @param noteComment 笔记评论记录
     * @return 笔记评论记录集合
     */
    public List<NoteComment> selectNoteCommentList(NoteComment noteComment);

    /**
     * 新增笔记评论记录
     * 
     * @param noteComment 笔记评论记录
     * @return 结果
     */
    public int insertNoteComment(NoteComment noteComment);

    /**
     * 修改笔记评论记录
     * 
     * @param noteComment 笔记评论记录
     * @return 结果
     */
    public int updateNoteComment(NoteComment noteComment);

    /**
     * 批量删除笔记评论记录
     * 
     * @param commentIds 需要删除的笔记评论记录主键集合
     * @return 结果
     */
    public int deleteNoteCommentByCommentIds(Long[] commentIds);

    /**
     * 删除笔记评论记录信息
     * 
     * @param commentId 笔记评论记录主键
     * @return 结果
     */
    public int deleteNoteCommentByCommentId(Long commentId);

    /**
     * 查询笔记的评论列表（包含子评论）
     * 
     * @param noteType 笔记类型
     * @param noteId 笔记ID
     * @return 评论列表
     */
    public List<NoteComment> selectCommentsByNote(String noteType, Long noteId);

    /**
     * 查询笔记的顶级评论列表
     * 
     * @param noteType 笔记类型
     * @param noteId 笔记ID
     * @return 顶级评论列表
     */
    public List<NoteComment> selectTopCommentsByNote(String noteType, Long noteId);

    /**
     * 查询评论的子评论列表
     * 
     * @param parentId 父评论ID
     * @return 子评论列表
     */
    public List<NoteComment> selectChildComments(Long parentId);

    /**
     * 查询用户的评论列表
     * 
     * @param userId 用户ID
     * @return 评论列表
     */
    public List<NoteComment> selectUserComments(Long userId);

    /**
     * 统计笔记评论数
     * 
     * @param noteType 笔记类型
     * @param noteId 笔记ID
     * @return 评论数
     */
    public int countCommentsByNote(String noteType, Long noteId);

    /**
     * 增加评论点赞数
     * 
     * @param commentId 评论ID
     * @return 结果
     */
    public int incrementCommentLike(Long commentId);

    /**
     * 减少评论点赞数
     * 
     * @param commentId 评论ID
     * @return 结果
     */
    public int decrementCommentLike(Long commentId);
}